(function(win, lib) {
	var doc = win.document;
	var docEl = doc.documentElement;
	var metaEl = doc.querySelector('meta[name="viewport"]');// 获取meta标签的viewport属性值
	var flexibleEl = doc.querySelector('meta[name="flexible"]');// 获取meta标签的flexible属性值
	var dpr = 0;
	var scale = 0;
	var tid;
	var flexible = lib.flexible || (lib.flexible = {});
	
	// 在头部引用viewport自定义属性的情况下
	if (metaEl) {// 如果获取到meta标签的viewport属性值
		console.warn('将根据已有的meta标签来设置缩放比例');
		var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);//\-转义字符 match分割符-
		// match：content内容匹配initial-scale
		if (match) {
			scale = parseFloat(match[1]);// 缩放比例为initial-scale后面的值
			dpr = parseInt(1 / scale);
		}
	// 在头部引用flexible自定义属性的情况下
	// <meta name="flexible" content="initial-dpr=2,maximum-dpr=3" />
	} else if (flexibleEl) {
		var content = flexibleEl.getAttribute('content');
		if (content) {
			var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
			var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
			if (initialDpr) {
				dpr = parseFloat(initialDpr[1]);
				scale = parseFloat((1 / dpr).toFixed(2));    
			}
			if (maximumDpr) {
				dpr = parseFloat(maximumDpr[1]);
				scale = parseFloat((1 / dpr).toFixed(2));    
			}
		}
	}

	// 如果没有自定义dpr和scale
	if (!dpr && !scale) {
		// UA（User Agent）检测：向访问网站提供所使用的浏览器类型、操作系统、浏览器内核等信息的标识
		var isAndroid = win.navigator.appVersion.match(/android/gi);
		// navigator对象包含有关浏览器的信息
		// appVersion方法做UA检测：返回浏览器的平台和版本信息
		var isIPhone = win.navigator.appVersion.match(/iphone/gi);
		// 对ios设备的dpr进行判断，安卓统一设定为1
		var devicePixelRatio = win.devicePixelRatio;
		if (isIPhone) {
			// iOS下，对于2和3的屏，用2倍的方案，其余的用1倍方案
			if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {// devicePixelRatio：所有WebKit浏览器以及Opera所支持
				dpr = 3;
			} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
				dpr = 2;
			} else {
				dpr = 1;
			}
		} else {
			// 其他设备下，仍旧使用1倍的方案
			dpr = 1;
		}
		scale = 1 / dpr;
	}

	docEl.setAttribute('data-dpr', dpr);// 设置dpr
	if (!metaEl) {// 如果没有获取到meta标签的viewport属性值
		metaEl = doc.createElement('meta');// 创建meta标签的viewport属性值
		metaEl.setAttribute('name', 'viewport');
		metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
		if (docEl.firstElementChild) {// documentElement有子节点，则插入viewport属性值
			docEl.firstElementChild.appendChild(metaEl);
		} else {// documentElement没有有子节点，则创建div插入viewport属性值
			var wrap = doc.createElement('div');
			wrap.appendChild(metaEl);
			doc.write(wrap.innerHTML);
		}
	}

	function refreshRem(){
		var width = docEl.getBoundingClientRect().width;//获取DOM元素到浏览器可视范围的距离
		if (width / dpr > 540) {// 大屏宽度下处理，逻辑像素>540，兼容大屏去除这段代码
			width = 540 * dpr;
		}
		var rem = width / 10;// 屏幕10等分
		docEl.style.fontSize = rem + 'px';// iphone5默认64px，iphone6默认75px
		flexible.rem = win.rem = rem;
	}

	win.addEventListener('resize', function() {// 窗口大小发生改变重新计算
		clearTimeout(tid);
		tid = setTimeout(refreshRem, 300);
	}, false);
	win.addEventListener('pageshow', function(e) {// 每次加载页面重新计算
		if (e.persisted) {
			clearTimeout(tid);
			tid = setTimeout(refreshRem, 300);
		}
	}, false);

	if (doc.readyState === 'complete') { //当前文档的状态（uninitialized-还未开始载入，loading-载入中，interactive-已加载、文档与用户可以开始交互，complete-载入完成）
		doc.body.style.fontSize = 12 * dpr + 'px';// body的font-size
	} else {
		doc.addEventListener('DOMContentLoaded', function(e) {// 当所有DOM解析完以后触发
			doc.body.style.fontSize = 12 * dpr + 'px';// body的font-size
		}, false);
	}
	

	refreshRem();

	flexible.dpr = win.dpr = dpr;
	flexible.refreshRem = refreshRem;
	// flexible.rem2px = function(d) {
	//     var val = parseFloat(d) * this.rem;
	//     if (typeof d === 'string' && d.match(/rem$/)) {
	//         val += 'px';
	//     }
	//     return val;
	// }
	// flexible.px2rem = function(d) {
	//     var val = parseFloat(d) / this.rem;
	//     if (typeof d === 'string' && d.match(/px$/)) {
	//         val += 'rem';
	//     }
	//     return val;
	// }

})(window, window['lib'] || (window['lib'] = {}));